\section{Les fonctions principales de la bibliothèque}

Toutes les structures de données définies plus haut ont servi à l'implémentation de fonctions principales de notre bibliothèque qui sont les suivantes:\footnote{Pour un détail sur les prototypes se référer au fichier \texttt{thread.h}, nous donnons juste les principes des fonctions} 

\subsection{Fonction \texttt{thread\_self}}
Cette fonction retourne l'identifiant du thread courant. Le thread qui s'exécute est stocké dans une variable globale et donc à chaque appel de \texttt{thread\_self} on retourne l'identifiant du thread référencé par la variable globale.

\subsection{Fonction \texttt{thread\_create}}
Cette fonction permet de créer un thread. Comme défini plus haut, un thread est représenté par une structure et dans celle-ci se trouve un contexte\footnote{Correspond au champ \textsf{ucontext\_t *context} et un contexte peut être vu comme une suite d'instructions que le thread exécute. On peut même l'assimiler au thread}. A chaque appel de la fonction \texttt{thread\_create}, le contexte du thread appelant est sauvegardé et remplacé par le contexte du thread créé. Ainsi un thread créé est automatiquement lancé et le thread appelant est mis en file d'attente. 

\subsection{Fonction \texttt{thread\_yield}}
À l'appel de cette fonction, le thread appelant entend rendre la main. À l'appel de la fonction \texttt{thread\_yield}, le contexte du thread appelant est sauvegardé et on lance le contexte du prochain thread en file d'attente. Si aucun thread n'attend le thread appelant est automatiquement relancé.

\subsection{Fonction \texttt{thread\_exit}}
À l'appel de cette fonction, le thread appelant est sensé avoir fini son exécution et cherche donc à stocker sa valeur de retour. La fonction \texttt{thread\_exit} se contente de stocker dans la structure du thread appelant sa valeur de retour, de signaler que le thread a terminé en mettant son statut à STATUS\_FINISH. Si le thread était attendu par un autre thread alors le thread attendant est automatiquement relancé, sinon la main est passée au prochain thread en file d'attente. Si le thread n'était pas attendu et qu'il n'y a aucun thread en file d'attente alors le programme termine.  

\subsection{Fonction \texttt{thread\_join}}
Cette fonction est utilisée pour attendre la terminaison d'un thread. À l'appel de cette fonction, le thread appelant est stoppé jusqu'à ce que le thread qu'il a décidé d'attendre termine. Ainsi la valeur de retour du thread attendu est récupérée et stockée dans une variable passée en paramètre.    
